/*MyPhotoIndex Free Photo Organizer <www.myphotoindex.com>
  Copyright (C) <2006-2009>  <Asaf Yarkoni asaf@yarkoni.net>

  This program is free software: you can redistribute it and/or modify
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation, either version 3 of the License, or
  (at your option) any later version.

  This program is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  GNU General Public License for more details.

  You should have received a copy of the GNU General Public License
  along with this program.  If not, see <http://www.gnu.org/licenses/>.*/
using System;
using System.Collections.Generic;
using System.Text;
using System.Xml;
using MyPhotoIndex.Interfaces.Tagging;
using MyPhotoIndex.ImageBank;
using System.Xml.Serialization;
using System.IO;

namespace MyPhotoIndex
{
    public class TagsDataExporter
    {
        private int[] m_tagIds;
        public TagsDataExporter(int[] tagIds)
        {
            m_tagIds = tagIds;
        }

        public void Export(XmlWriter writer)
        {
            writer.WriteStartElement("Tags");

            for (int i = 0; i < m_tagIds.Length; i++)
            {
                IImageTag tag = ImageTagCollection.Instance[m_tagIds[i]];
                ExportOneImageMetadata(writer, tag);
            }

            writer.WriteEndElement();
        }

        private void ExportOneImageMetadata(XmlWriter writer, IImageTag tagData)
        {
            XmlSerializer serializer = new XmlSerializer(tagData.GetType());
            using (MemoryStream ms = new MemoryStream())
            {
                XmlWriter tempWriter = new XmlTextWriter(ms, Encoding.Unicode);
                serializer.Serialize(tempWriter, tagData);
                ms.Position = 0;
                XmlTextReader reader = new XmlTextReader(ms);
                reader.MoveToContent();
                string data = reader.ReadOuterXml();
                writer.WriteRaw(data);
            }
        }
    }
}
